.\" -*- nroff -*-
.\" Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
.\"
.TH IBV_OPEN_DEVICE 3 2006-10-31 libibverbs "Libibverbs Programmer's Manual"
.SH "NAME"
ibv_open_device, ibv_close_device \- open and close an RDMA device context
.SH "SYNOPSIS"
.nf
.B #include <infiniband/verbs.h>
.sp
.BI "struct ibv_context *ibv_open_device(struct ibv_device " "*device" ");
.sp
.BI "int ibv_close_device(struct ibv_context " "*context" ");
.fi
.SH "DESCRIPTION"
.B ibv_open_device()
opens the device
.I device
and creates a context for further use.
.PP
.B ibv_close_device()
closes the device context
.I context\fR.
.SH "RETURN VALUE"
.B ibv_open_device()
returns a pointer to the allocated device context, or NULL if the request fails.
.PP
.B ibv_close_device()
returns 0 on success, \-1 on failure.
.SH "NOTES"
.B ibv_close_device()
does not release all the resources allocated using context
.I context\fR.
To avoid resource leaks, the user should release all associated
resources before closing a context.

Setting the environment variable **RDMAV_ALLOW_DISASSOC_DESTROY** tells the
library to relate an EIO from destroy commands as a success as the kernel
resources were already released. This comes to prevent memory leakage in the
user space area upon device disassociation. Applications using this flag cannot
call ibv_get_cq_event or ibv_get_async_event concurrently with any call to an
object destruction function.

.SH "SEE ALSO"
.BR ibv_get_device_list (3),
.BR ibv_query_device (3),
.BR ibv_query_port (3),
.BR ibv_query_gid (3),
.BR ibv_query_pkey (3)
.SH "AUTHORS"
.TP
Dotan Barak <dotanba@gmail.com>
